sublime_fuzzy
Fuzzy matching algorithm based on Sublime Text's string search. Iterates through characters of a search string and calculates a score.
The score is based on several factors:
- Word starts like the
t
insome_thing
get a bonus (bonus_word_start
) - Consecutive matches get an accumulative bonus for every consecutive match (
bonus_consecutive
) - Matches with higher coverage (targets
some_release
(lower) versusa_release
(higher) with patternrelease
) will get a bonus multiplied by the coverage percentage (bonus_coverage
) - The distance between two matches will be multiplied with the
penalty_distance
penalty and subtracted from the score
The default bonus/penalty values are set to give a lot of weight to word starts. So a pattern scc
will match
SoccerCartoonController, not SoccerCartoonController.
Match Examples
With default weighting.
Pattern | Target string | Result |
---|---|---|
scc |
SoccerCartoonController |
SoccerCartoonController |
something |
some search thing |
some search thing |
Usage
Basic usage:
use best_match;
let s = "some search thing";
let search = "something";
let result = best_match.unwrap;
println!;
Match.continuous_matches()
returns a list of consecutive matches
((start_index, length)
). Based on those the input string can be formatted.
sublime_fuzzy
provides a simple formatting function that wraps matches in
tags:
use ;
let s = "some search thing";
let search = "something";
let result = best_match.unwrap;
assert_eq!;
The weighting of the different factors can be adjusted:
use ;
let case_insensitive = true;
let mut search = new;
let config = ScoreConfig ;
search.set_score_config;
println!;
Note: Any whitespace in the pattern ('something'
in the examples above) will be removed.
Documentation
Check out the documentation at docs.rs.